package Herramientas;

import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class MailMotor {

    //  ESTE EMAIL QUE SE UTILIZARA COMO USUARIO DURANTE LA AUTENTIFICACION SMTP
    String EMAIL = "tarry.robot.sistema@gmail.com";
    //String EMAIL = "developer.alan89@gmail.com"; 
    // El password del correo dedicado al sistema 
    private static final String PASSWORD = "acceso89";  //"adminsys";
    // El servidor smtp 
    private static final String SERVIDOR = "smtp.gmail.com";
    // Transpor Layer security activado
    private static final String STARTTLS = "true";
    // El puerto de envio de correos del servidor de correos  
    private static final String PUERTO = "587";
    // Autentificacion del servidor activada 
    private static final String AUTH = "true";
    // VARIABLE DE SESION EMAIL
    private Session session;

    public MailMotor() {
        Properties props = new Properties();
        //--> Nombre del host de correo, es smtp.gmail.com  
        props.setProperty("mail.smtp.host", SERVIDOR);
        // TLS si está disponible  
        props.setProperty("mail.smtp.starttls.enable", STARTTLS);
        // Puerto de gmail para envio de correos  
        props.setProperty("mail.smtp.port", PUERTO);
        // Nombre del usuario  
        props.setProperty("mail.smtp.user", EMAIL);
        // Si requiere o no usuario y password para conectarse.  
        props.setProperty("mail.smtp.auth", AUTH);
        // Se inicia una nueva sesion  
        session = Session.getDefaultInstance(props);
    }

    public void sendMail(int banderaDestino, String asunto, String mensaje) {
        try {
            String destinatario = new String();
// VENTAS = 1 
// ALMACEN = 2 
// PRODUCCION = 3
// CONTABILIDAD 4
            switch (banderaDestino) {
                case 1:
                    destinatario = "tarry.ventas@gmail.com";
                case 2:
                    destinatario = "tarry.almacen@gmail.com";
                    break;
                case 3:
                    destinatario = "tarry.produccion@gmail.com";
                    break;
                case 100:
                    destinatario = "malangr@outlook.es";
                    break;
            }

            MimeMessage mimeMessage = new MimeMessage(session);
            mimeMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(destinatario));
            mimeMessage.setSubject(asunto);
            mimeMessage.setText(mensaje);

            /*
             *  LA DIRECCION DE CORREO ELECTRONICO CON LA QUE SE DESEA QUE EL MENSAJE APARESCA 
             *  ESTA PUEDE O NO EXISTIR   EN EL SERVER 
             */
            mimeMessage.setFrom(new InternetAddress("soporte@soporte.com.mx"));
            Transport t = session.getTransport("smtp");
            t.connect(EMAIL, PASSWORD);
            t.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
            t.close();

        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
    }

    /**
     * ALAN GONZALEZ METODO QUE PERMITE EL ENVIO DE ARCHIVOS ADJUNTOS VIA EMAIL
     *
     * @param banderaDestino
     * @param asunto
     * @param mensaje
     */
    public void enviarMailAdjunto(String Destino, String asunto, String mensaje, String rutaAdjunto) {
        try {
            Properties props = new Properties();
            props.put("mail.smtp.host", "smtp.gmail.com");
            props.setProperty("mail.smtp.starttls.enable", "true");
            props.setProperty("mail.smtp.port", "587");
            props.setProperty("mail.smtp.user", "tarry.robot.sistema@gmail.com");
            props.setProperty("mail.smtp.auth", "true");

            Session session = Session.getDefaultInstance(props, null);

            BodyPart texto = new MimeBodyPart();
            texto.setText(mensaje);

            BodyPart adjunto = new MimeBodyPart();
            adjunto.setDataHandler(
                    new DataHandler(new FileDataSource(rutaAdjunto)));
            adjunto.setFileName("reporte.pdf");

            MimeMultipart multiParte = new MimeMultipart();
            multiParte.addBodyPart(texto);
            multiParte.addBodyPart(adjunto);

            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress("yo@yo.com"));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(Destino));
            message.setSubject(asunto);
            message.setContent(multiParte);

            Transport t = session.getTransport("smtp");
            t.connect("tarry.robot.sistema@gmail.com", "acceso89");
            t.sendMessage(message, message.getAllRecipients());
            t.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * ALAN GONZALEZ  ESTE METODO 
     * @param Destino
     * @param asunto
     * @param mensaje
     * @param rutaAdjunto 
     */
     public void enviarMailModuloCompras(String Destino, String asunto, String mensaje, String rutaAdjunto) {
        try {
            Properties props = new Properties();
            props.put("mail.smtp.host", "smtp.gmail.com");
            props.setProperty("mail.smtp.starttls.enable", "true");
            props.setProperty("mail.smtp.port", "587");
            props.setProperty("mail.smtp.user", "tarry.robot.sistema@gmail.com");
            props.setProperty("mail.smtp.auth", "true");

            Session session = Session.getDefaultInstance(props, null);

            BodyPart texto = new MimeBodyPart();
            texto.setText(mensaje);

            BodyPart adjunto = new MimeBodyPart();
            adjunto.setDataHandler(
                    new DataHandler(new FileDataSource(rutaAdjunto)));
            adjunto.setFileName("reporte.pdf");

            MimeMultipart multiParte = new MimeMultipart();
            multiParte.addBodyPart(texto);
            multiParte.addBodyPart(adjunto);

            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress("yo@yo.com"));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(Destino));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress("compras@tarry.com.mx"));
            message.setSubject(asunto);
            message.setContent(multiParte);

            Transport t = session.getTransport("smtp");
            t.connect("tarry.robot.sistema@gmail.com", "acceso89");
            t.sendMessage(message, message.getAllRecipients());
            t.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
